package edu.ccut.saturn.component;

import java.util.List;
import java.util.Map;

/**
 * 定义了验证组件信息的操作接口。
 * 
 * @author 谷钰
 * @author 温建
 * 
 * @version 1.0 2008.9.09
 * @see IParameterContext
 */
public interface IValidateInfo extends XmlSerializable {

	/**
	 * 表示验证类型是 error；即验证结果是成功或者失败
	 */
	public static final String VALIDATETYPE_WARN = "validateType_warn";

	/**
	 * 表示验证类型是 warn；即验证结果是提示警告信息
	 */
	public static final String VALIDATETYPE_ERROR = "validateType_error";

	public static final String EVENT_ONBLUR = "onblur";

	public static final String EVENT_ONCHANGE = "onchange";

	public static final String EVENT_ONCLICK = "onclick";

	public static final String EVENT_ONDBLCLICK = "ondblclick";

	public static final String EVENT_ONKEYDOWN = "onkeydown";

	public static final String EVENT_ONKEYPRESS = "onkeypress";

	public static final String EVENT_ONFOCUS = "onfocus";

	public static final String EVENT_ONKEYUP = "onkeyup";

	public static final String EVENT_ONMOUSEDOWN = "onmousedown";

	public static final String EVENT_ONMOUSEMOVE = "onmousemove";

	public static final String EVENT_ONMOUSEOUT = "onmouseout";

	public static final String EVENT_ONMOUSEOVER = "onmouseover";

	public static final String EVENT_ONMOUSEUP = "onmouseup";

	/**
	 * 获得验证组件的键值
	 * 
	 * @return
	 */
	public abstract String getKey();

	/**
	 * 获得验证组件的名称
	 * 
	 * @return
	 */
	public abstract String getName();

	/**
	 * 获得描述信息
	 * 
	 * @return
	 */
	public abstract String getDescription();

	/**
	 * 获得验证组件引用的java类型的Class对象
	 * 
	 * @return
	 */
	public abstract Class<? extends IValidate> getClassType();

	/**
	 * 通过验证组件信息创建验证组件实例
	 * 
	 * @return
	 */
	public abstract IValidate createValidate();

	/**
	 * 获得参数列表
	 * 
	 * @return
	 */
	public abstract List<String> getArgs();

	/**
	 * 获得js方法名称
	 * 
	 * @return
	 */
	public abstract String getJSMethodName();

	/**
	 * 获得自定义js方法
	 * 
	 * @return
	 */
	public abstract String getCustemJSMethodInfo();

	/**
	 * 获得验证错误信息列表
	 * 
	 * @return
	 */
	public abstract Map<String, String> getErrorInfos();

	/**
	 * 获得引用的java类型的字符串名称
	 * 
	 * @return
	 */
	public abstract String getClassTypeStr();

	/**
	 * 获得前台触发验证的事件列表
	 * 
	 * @return
	 */
	public abstract List<String> getEventInfos();

	/**
	 * 获得验证类型，是错误还是警告
	 * 
	 * @return
	 */
	public abstract String getValidateType();

	// ////////////////////////////////////////////////////////////////////

	/**
	 * 设置验证组件的键值
	 * 
	 * @return
	 */
	public abstract void setKey(String key);

	/**
	 * 设置验证组件的名称
	 * 
	 * @return
	 */
	public abstract void setName(String name);

	/**
	 * 设置描述信息
	 * 
	 * @return
	 */
	public abstract void setDescription(String description);

	/**
	 * 设置验证组件引用的java类型的Class对象
	 * 
	 * @return
	 */
	public abstract void setClassType(Class<? extends IValidate> classType);

	/**
	 * 设置参数列表
	 * 
	 * @return
	 */
	public abstract void setArgs(List<String> args);

	/**
	 * 设置js方法名称
	 * 
	 * @return
	 */
	public abstract void setJSMethodName(String jsMethodName);

	/**
	 * 设置自定义js方法
	 * 
	 * @return
	 */
	public abstract void setCustemJSMethodInfo(String custemJSMethodInfo);

	/**
	 * 设置验证错误信息列表
	 * 
	 * @return
	 */
	public abstract void setErrorInfos(Map<String, String> errorInfos);

	/**
	 * 设置引用的java类型的字符串名称
	 * 
	 * @return
	 */
	public abstract void setClassTypeStr(String classTypeStr);

	/**
	 * 设置前台触发验证的事件列表
	 * 
	 * @return
	 */
	public abstract void setEventInfos(List<String> eventInfos);

	/**
	 * 设置验证类型，是错误还是警告
	 * 
	 * @return
	 */
	public abstract void setValidateType(String validateType);

	public abstract String getValidateInfoFullkey();

	public abstract void setValidateInfoFullkey(String fullkey);
}